nginx(3)之反向代理、限速 您所在的位置:网站首页 nginx ip限速 nginx(3)之反向代理、限速

nginx(3)之反向代理、限速

#nginx(3)之反向代理、限速| 来源: 网络整理| 查看: 265

反向代理 原理

1、客户机在发起请求时,不会直接发送给目的主机,而是先发送给代理服务器;

2、代理服务器接收客户机请求后,再向业务服务器发出请求;

3、业务服务器 接收请求、处理请求 最后 响应请求;

3、代理服务器接收业务主机返回的数据;

4、代理服务器响应客户端请求;

5、客户端通过浏览器渲染请求并展示给用户。

正向代理

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

正向代理的用途:

访问原来无法访问的资源,如google; 可以做缓存,加速访问资源;对客户端访问授权,上网进行认证;代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息; 应用场景

1、堡垒机应用:业务服务器只接收来自堡垒机的链接访问(例如:代理服务器的Ip或特定端口),其他的都拒绝。

 

2、发布内网服务器:

 

 3、缓存应用:将静态数据缓存起来,提高用户体验。根据28法则,缓存服务器处理80%的数据,业务服务器处理20%的数据。

 代码实现 客户端 win7  http://192.168.244.128 反代  nginx  ip128 业务机器  https://www.cnblogs.com/fqh202 or http://101.37.225.65/

在客户机输入 http://192.168.244.128,反代服务器向 http://101.37.225.65/ 请求数据并返回:

server { listen 80; server_name www.abc.com; charset utf8; location / { proxy_pass http://101.37.225.65:80; } }

测试:

 

限速

限制单位时间内的最大连接数:限制某个用户在一个给定的时间段内能够产生HTTP请求的数,最典型的就是12306网站,由于购票需要会不断刷新页面,进而产生大量请求(而淘宝天猫双十一不会不断刷新页面),最终会导致当机,所以必须限制单位时间内的最大连接数。

安全目的,例如 暴力破解密码。

通过限制进来的请求速率,并且结合日志标记目标urls来帮助防范DDOS攻击。

什么是DDOS 攻击?

它在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下线。

DDOS 里面的 DOS 是 denial of service(停止服务)的缩写,表示这种攻击的目的,就是使得服务中断。最前面的那个 D 是 distributed (分布式),表示攻击不是来自一个地方,而是来自四面八方,因此更难防。你关了前门,他从后门进来;你关了后门,他从窗口跳起来。

参考:http://www.ruanyifeng.com/blog/2018/06/ddos.html

应用场景

1、DDOS防御

2、下载场景保护

原理和算法思想

水(请求)从上方倒入水桶,从水桶下方流出(被处理);

来不及流出的水存在水桶中(缓存),以固定的速率流出;

水桶满后水溢出(丢弃)。

这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。

实现方式

Nginx主要有两种限速方式:按连接数限速(ngx_http_limit_conn_module)、按请求速率限速(ngx_http_limit_req_module)。

按连接数限速

按连接数限速是指限制单个IP(或者其他的key)同时发起的连接数,超出这个限制后,Nginx将直接拒绝更多的连接。

配置:

limit_req_zone $binary_remote_addr zone=addr:10m rate=1r/s; # 每秒处理1个请求 server { listen 80; charset utf8; location / { root html; index index.html index.htm; } location /abc { limit_req zone=addr burst=5 nodelay; } }

第一段配置

第一个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址;

第二个参数:zone=addr:10m表示生成一个大小为10M,名字为addr的内存区域,用来存储访问的频次信息;

第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的;

第二段配置

第一个参数:zone=one 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应;

第二个参数:burst=5,这个配置的意思是设置一个大小为5的缓冲区,当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内;

第三个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队

按请求速率限速

按请求速率限速是指限制单个IP(或者其他的key)发送请求的速率,超出指定速率后,Nginx将直接拒绝更多的请求。采用leaky bucket算法实现。

limit_conn_zone $binary_remote_addr zone=iozone:10m; server { listen 80; charset utf8; location / { root html; index index.html index.htm; } location /cde { limit_conn iozone 1; limit_rate 100k; # 最大下载速率 } }

$binary_remote_addr是限制同一客户端ip地址

$server是限制同一server最大并发数

limit_conn为限制并发连接数,nginx 1.18以后用limit_conn_zone替换了limit_conn

限速前:

 

限速后:

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有